﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class ObjektGebäude3D
    Private Structure GebäudeInstanz
        Public Mesh As Objekt3D
        Public GebäudeID As String
    End Structure
    Dim Gebäude() As GebäudeInstanz = {}


    Public Sub IniGebäude()
        Dim GStack As New Stack(Of GebäudeInstanz)
        For Each Dat In My.Computer.FileSystem.GetFiles(My.Settings.Resourcenpfad + "Gebäude\3D\")
            If Dat.ToLower.EndsWith(".X".ToLower) Then
                'Hoffentlich ein gültiges Format, und kein unnützes Gebäude!
                Dim Geb As GebäudeInstanz
                Geb.GebäudeID = Dat.Remove(0, Dat.LastIndexOf("\") + 1).ToUpper.Replace(".X".ToUpper, "")
                Geb.Mesh = New Objekt3D()
                Geb.Mesh.MeshBildLaden(Dat)
                GStack.Push(Geb)
            End If
        Next
        Gebäude = GStack.ToArray
        'Array.Reverse(Gebäude)'nur, damit die Reihenfolge wieder stimmt!
        GStack.Clear() 'brauchen wir nicht mehr.
    End Sub
    Public Sub IniSpielerfarben()
        ReDim Objekt3D.Spielerfarben(Objektverwalter.Spielfeld.Spieler.Length - 1)
        For I = 0 To Objektverwalter.Spielfeld.Spieler.Length - 1
            Objekt3D.Spielerfarben(I) = Objektverwalter.Spielfeld.Spieler(I).Farbe
        Next
    End Sub
    Public Sub Malen(ByVal GebäudeID As String, ByVal X As Integer, ByVal Y As Integer, ByVal Schlacht As Integer, ByVal Spieler As Integer)
        For i = 0 To Gebäude.Length - 1
            If Gebäude(i).GebäudeID.ToUpper = GebäudeID.ToUpper Then
                Dim standardMatrix As Matrix = Grafikengine.Grafikkarte.Transform.World
                Dim M As Matrix = Matrix.Identity
                M.M41 = X
                M.M43 = -Y
                Grafikengine.Grafikkarte.Transform.World = M
                Dim Eingef As Boolean
                Objekt3D.SpielerFarbe = ObjektmarkiertesFeld.getFeldFarbe(X, Y, Objekt3D.Spielerfarben(Spieler), Eingef)
                If My.Settings.TotalEinfärben Or Eingef Then
                    Gebäude(i).Mesh.Malen(M, True)
                Else
                    Gebäude(i).Mesh.Malen(M)
                End If

                Grafikengine.Grafikkarte.Transform.World = standardMatrix
                Exit Sub
            End If
        Next
        'Console.WriteLine("folgendes GebäudeMesh fehlt: " + GebäudeID)
    End Sub
    Public Function getMesh(ByVal GebäudeID As String) As Mesh
        For i = 0 To Gebäude.Length - 1
            If Gebäude(i).GebäudeID.ToUpper = GebäudeID.ToUpper Then
                Return Gebäude(i).Mesh.MeshBild.moMesh
            End If
        Next
        Return Nothing
    End Function
End Class
